<?php
/** .-------------------------------------------------------------------
 * |  Software: [HDPHP framework]
 * |      Site: www.hdphp.com  www.hdcms.com
 * |-------------------------------------------------------------------
 * |    Author: 向军 <2300071698@qq.com>
 * |    WeChat: aihoudun
 * | Copyright (c) 2012-2019, www.houdunwang.com. All Rights Reserved.
 * '-------------------------------------------------------------------*/

namespace app\home\controller;

use houdunwang\request\Request;
use system\model\Article;
use system\model\Category;
use system\model\Module;

/*
 * 最终目的：通过改变地址栏的m参数和action参数，能分别访问到addons或是module中的类方法
 * 框架的特点：1.不会识别app之外的目录
 *           2.我们在地址栏中的输入框架不能识别的参数时，会默认加载/home/entry/index方法
 * 目的：通过get参数来访问，例如：?m=pic&action=controller/index/index【m:模块，action:controller/控制器/方法】
 * 对应的目录结构：
 * --addons
 * ---pic
 * ----controller
 * -----index(函数index中有对应的index方法)
 */


class Entry
{
	protected $template;
	public function __construct()
	{
		//判断是pc端的还是手机端的数据，之后对template进行赋值
		$this->template = 'template/' . ( IS_MOBILE ? 'mobile' : 'web' ) . '/' . v('config.template');
		//定义模板路径常量
		define(__TEMPLATE__,__ROOT__.'/' . $this->template);
		//运行模块
		$this->runModule();

	}

	public function index()
    {
		$headConf = [
			'title'=>'首页',
			'css'=>['index'],
		];
		return view($this->template . '/index.html',compact('headConf'));
    }

	/**
	 * 栏目页面
	 */
	public function category ()
	{

		$cate_id   = Request::get( 'cate_id' );
		$cms_field = Category::find( $cate_id );
		if ( $cms_field[ 'ishome' ] == 1 ) {
			//加载栏目封面页home.html
			$headConf  = [
				'title' => $cms_field['cate_name'] ,
				'css'   => [ 'list_default' ] ,
			];
			return view( $this->template . '/home.html' , compact( 'headConf' , 'cms_field' ) );
		} else {
			$headConf  = [
				'title' => $cms_field['cate_name'],
				'css'   => [ 'list_article' ] ,
			];
			//加载列表页
			return view( $this->template . '/list.html' , compact( 'headConf' , 'cms_field' ) );
		}

	}

    protected function runModule()
	{
		//通过get函数获得地址栏中模块名
		$m = Request::get('m');
		//在数据库中取出模块名为$m的一条数据
		$module = Module::where('module_name',$m)->first();
		//通过get函数获得地址栏中的方法名
		$action = Request::get('action');
		//p($action);        结果是：controller/index/index
		if($module && $m && $action)
		{
			//把action转为数组
			$info = explode('/',$action);
			//$info数据的格式如下：
			//Array(
			//	[0] => controller     pic目录下的controller文件夹
			//	[1] => index          pic目录下的controller文件夹下面的Index.php
			//	[2] => index          Index.php文件中的index方法
			//)
			$class = ($module['module_is_system']==1?'module':'addons')."\\".$m.'\\'.$info[0].'\\'.ucfirst($info[1]);
			//方法的名称以参数的形式传递进去
			die(call_user_func_array([new $class,$info[2]],[]));
		}
	}
	/*
	 * 文章内容页
	 */
	public function content ()
	{
		$arc_id = Request::get('arc_id');
		//找对应数据
		$cms_field = Article::find( $arc_id );
		$headConf = [
			'title'=>$cms_field['arc_title'],
			'css'=>['page'],
		];
		//点击次数自增1
		Db::table("article")->where('arc_id',$arc_id)->increment('arc_click',1);
		return view( $this->template . '/content.html' , compact( 'headConf','cms_field' ) );
	}

	public function search ()
	{
		$searchKeyword = Request::get( 'keyword' );
		$headConf      = [
			'title' => '搜索结果' ,
			'css'   => [ 'list_article' ] ,
		];
		//p($searchKeyword);
		//在数据表[article]搜索跟$searchKeyword相关的内容
		$search_data = Db::table( 'article' )->where( 'arc_title' , 'like' , "%$searchKeyword%" )->get();
		//p($search_data);
		//将搜索关键词写入数据库
		if(Db::table('addons_search')->where('keyword',$searchKeyword)->first()){
			//找的见，将click搜索次数+1
			Db::table('addons_search')->where('keyword',$searchKeyword)->increment('click',1);
		}else{
			//将搜索词写入数据库
			Db::table('addons_search')->insert(['keyword'=>$searchKeyword,'click'=>1]);
		}

		return view( $this->template . '/search.html' , compact( 'headConf' , 'search_data' ) );

	}
}